#ifndef EXCHANGE_INTEROP_DOCUMENT_INSTANCE_H
#define EXCHANGE_INTEROP_DOCUMENT_INSTANCE_H

#include <sstream>
#include <unordered_map>
#include <vector>
// #include "nlohmann/json.hpp"
#include "topology/TopoShape.hpp"
#include "InterOpMatrix.h"

namespace AMCAX::Exchange
{
    namespace InterOp
    {
        class InterOpDocumentReference;

        /// @brief
        class InterOpDocumentInstance
        {
        public:
            InterOpDocumentInstance() = default;

            std::shared_ptr<InterOpDocumentReference> GetDocumentReference() const;
            void SetDocumentReference(std::shared_ptr<InterOpDocumentReference> documentReference);

            std::string GetPersistName() const;
            void SetPersistName(const std::string &pname);

            InterOpMatrix GetTransform() const;
            void SetTransform(const InterOpMatrix &matrix);

            std::string GetName() const;
            void SetName(const std::string &name);

        private:
            /// The name of the document instance
            std::string name_;
            /// The persist name of the document instance
            std::string pname_;
            /// The document reference of the instance
            std::shared_ptr<InterOpDocumentReference> documentReference_;
            /// The transformation matrix of the instance
            InterOpMatrix transform_;
        };

    }

}

#endif // EXCHANGE_INTEROP_DOCUMENT_INSTANCE_H